/*
 * @author				: Juliano Zinni
 * @create				: 30/07/2011
 * @last modified		: 06/08/2011
 * @version				: 2.3
 * @description			: Manutenção de atividades do projeto
*/

/*
 * @description: Variável que contém todas as funções de manipulação utilizadas pelo grid
 * @author: Juliano Zinni
 * @since: 31/07/2011
*/

var functionsGridAtividade = {
	
	Projeto_codigo : ""
	,Projeto_nome : ""
	
	,trataCusto: function(val){
		if (val == 'S') {
	        return '<span style="font-weight:bold; color:green;">Sim</span>';
	    } else if (val == 'N') {
	        return '<span style="font-weight:bold; color:red;">Não</span>';
	    }
	    return val;
	}
	
	,trataPrioridade: function(val){
		if (val == 'B') {
	        return '<span style="font-weight:bold; color:green;">Baixa</span>';
	    } else if (val == 'M') {
	        return '<span style="font-weight:bold; color:yellow;">Média</span>';
	    } else if (val == 'A') {
	        return '<span style="font-weight:bold; color:red;">Alta</span>';
	    }
	    return val;
	}
		
	
	,encerrarAtividade:function(){
		var selectedRow = Ext.getCmp('atividades').getSelectionModel().getSelections();
		
		var objparams = {
			codigoAtividade: selectedRow[0].data.codigo
		}
		encerraAtividade.load({params : objparams, callback: functionsGridAtividade.returnEncerrarAtividade});
	}
	
	,returnEncerrarAtividade: function(record, options, success){
		if(success){
			Ext.ux.MessageBox.flash({
				msg: "Atividade encerrada com sucesso",
				type: 'success'
			});
			
			functionsGridAtividade.listaAtividades(functionsGridAtividade.Projeto_codigo, functionsGridAtividade.Projeto_nome)
		
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento do encerramento da atividade",
				type: 'error'
			});
		}
	}
	
	
	,confimaCancelamento: function(){
		Ext.MessageBox.confirm('Confirmação de cancelamento','Realmente deseja cancelar essa operação?', function(btn)
		{
			if(btn == 'yes')
			{
				windowAtividade.hide();
			}
		}, this);

	}

	,createRecord: function(){
		formAtividade.form.reset();
		tabAtividade.setActiveTab(1);
	}
	
	,listaAtividades: function(codigoProjeto, nomeProjeto){
		
		formDadosProjeto.getForm().findField("codigoProjeto").setValue(codigoProjeto);
		formDadosProjeto.getForm().findField("nomeProjeto").setValue(nomeProjeto);
		functionsGridAtividade.Projeto_codigo = codigoProjeto;
		functionsGridAtividade.Projeto_nome = nomeProjeto;
		functionsFormAtividade.listarVoluntarios();
		
		
		var objparams = {
			action: "listaAtividades"
			,codigoProjeto: codigoProjeto
		}
		listaAtividades.load({params : objparams, callback: this.returnListaAtividades});
	}
	
	,returnListaAtividades: function(record, options, success){
		
		if(success){
			/*
			Ext.ux.MessageBox.flash({
				msg: "Atividades listadas com sucesso",
				type: 'success'
			});
			*/
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das atividades",
				type: 'error'
			});
		}
		

	}
	
	,editRecord: function(){
		if(gridAtividades.getSelectionModel().hasSelection()){
			formAtividade.form.reset();
			
			var selectedRow = gridAtividades.getSelectionModel().getSelections();
			var objetoAtividade = selectedRow[0].data;
			functionsFormAtividade.capturaAtividade(objetoAtividade.codigo)
			tabAtividade.setActiveTab(1);
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Nenhum registro foi selecionado!',
				type: 'warning',
				pause: 3
			});
		}
		
	}
	
	,deleteRecord: function(){
		
		if(Ext.getCmp('atividades').getSelectionModel().hasSelection()){
			
			Ext.MessageBox.confirm('Confirmação de Exclusão','Realmente deseja excluir esse registro?', function(btn)
			{
				if(btn == 'yes')
				{
					var selectedRow = Ext.getCmp('atividades').getSelectionModel().getSelections();
					this.params = "&codigoAtividade=" + selectedRow[0].data.codigo;
					
					Ext.Ajax.request({
						url: baseURL + '/service/index.php?controller=AtividadeController&service=excluir',
						//url: baseURL + '/data/excluiProjeto.json',
						success:  function(result){
						
							var objRetorno = Ext.decode(result.responseText);
							
							if(objRetorno.success == true){
								Ext.ux.MessageBox.flash({
									msg: objRetorno.message,
									type: 'success'
								});
								
								functionsGridAtividade.listaAtividades(functionsGridAtividade.Projeto_codigo, functionsGridAtividade.Projeto_nome)
								
							}else{
								Ext.ux.MessageBox.flash({
									msg: objRetorno.message,
									type: 'error'
								});
							}
			
						},
						
						params: this.params,
						scope: this			
					});
				}
			}, this);
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Nenhum registro foi selecionado!',
				type: 'warning',
				pause: 3
			});
		}
		
	}
}


/*
 * @description: Variável que contém todas as funções de manipulação utilizadas pelo form de manutenção de atividades
 * @author: Juliano Zinni
 * @since: 06/08/2011
*/

var functionsFormAtividade = {
	
	listarVoluntarios: function(){
		var objparams = {
				
		}
		listaVoluntarios.load({params : objparams, callback: this.returnListaVoluntarios});
	}

	,returnListavoluntarios: function(record, options, success){
		
		
	}
	
	,resetForm: function(){
		formAtividade.form.reset();
	}
	
	,capturaAtividade: function(codigoAtividade){
		var objparams = {
			action: "capturaAtividade"
			,codigoAtividade: codigoAtividade
		}
		capturaAtividade.load({params : objparams, callback: this.returnCapturaAtividade});
	}

	,returnCapturaAtividade: function(record, options, success){
		formAtividade.getForm().loadRecord( record[0] );
	}
	
	
	,alteraRegistro: function(button){
		
		var form = formAtividade.getForm();		
		
		if(form.isValid())
		{
			this.params = formAtividade.form.getValues(true);
			this.params += "&Projeto_codigo=" + functionsGridAtividade.Projeto_codigo;
			this.loaderTarget = button;
			Ext.ux.Loader.start({sender: button, waitingText: 'Alterando...'});

			Ext.Ajax.request({
				url: baseURL + '/service/index.php?controller=AtividadeController&service=alterar',
				//url: baseURL + '/include/ProjetoAction.php',
				success:  function(result){
				
					var objRetorno = Ext.decode(result.responseText);
					
					if(objRetorno.success == true){
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'success'
						});
					   
						Ext.ux.Loader.stop(this.loaderTarget);
						formAtividade.form.reset();
						tabAtividade.setActiveTab(0);
						functionsGridAtividade.listaAtividades(functionsGridAtividade.Projeto_codigo, functionsGridAtividade.Projeto_nome)
					}else{
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'error'
						});
					}
	
				},
				
				params: this.params,
				scope: this			
			});                    
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Preencha todos os campos obrigatórios',
				type: 'warning',
				pause: 3
			});
		}
		
	}
	
	
	,insereRegistro: function(button){
		
		
		var form = formAtividade.getForm();		
		
		if(form.isValid())
		{
			this.params = formAtividade.form.getValues(true);
			this.params += "&Projeto_codigo=" + functionsGridAtividade.Projeto_codigo;
			this.loaderTarget = button;
			Ext.ux.Loader.start({sender: button, waitingText: 'Salvando...'});

			Ext.Ajax.request({
				url: baseURL + '/service/index.php?controller=AtividadeController&service=inserir',
				//url: baseURL + '/include/ProjetoAction.php',
				success:  function(result){
				
					var objRetorno = Ext.decode(result.responseText);
					
					if(objRetorno.success == true){
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'success'
						});
					   
						Ext.ux.Loader.stop(this.loaderTarget);
						formAtividade.form.reset();
						tabAtividade.setActiveTab(0);
						functionsGridAtividade.listaAtividades(functionsGridAtividade.Projeto_codigo, functionsGridAtividade.Projeto_nome)
					}else{
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'error'
						});
					}
	
				},
				
				params: this.params,
				scope: this			
			});                    
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Preencha todos os campos obrigatórios',
				type: 'warning',
				pause: 3
			});
		}
	}
}




/*
 * @description: Store responsável por capturar as atividades de um projeto
 * @author: Juliano Zinni
 * @since: 28/07/2011
*/
var listaAtividades = new Ext.data.JsonStore({
    storeId: 'listaAtividades',
    url: baseURL + '/service/index.php?controller=AtividadeController&service=listarAtividades',
    root: 'elements',
    autoLoad: false,
	sortInfo: {field: 'titulo', direction: 'ASC'},
    fields: [
		{
			name		: 'codigo'
			,mapping	: 'codigo'
		}
		,{
			name		: 'titulo'
			,mapping	: 'titulo'
		}
		,{
			name		: 'voluntarioResponsavel'
			,mapping	: 'voluntarioResponsavel'
		}
		,{
			name		: 'dataInicio'
			,mapping	: 'dataInicio'
			,type 		: 'date'
			,dateFormat	: 'Y-m-d'
		}
		,{
			name		: 'dataFim'
			,mapping	: 'dataFim'
			,type 		: 'date'
			,dateFormat	: 'Y-m-d'
		}
		,{
			name		: 'ordemTarefa'
			,mapping	: 'ordemTarefa'
		}
		,{
			name		: 'valorEstimado'
			,mapping	: 'valorEstimado'
		}
		,{
			name		: 'valorOrcado'
			,mapping	: 'valorOrcado'
		}
		,{
			name		: 'prioridade'
			,mapping	: 'prioridade'
		}
		,{
			name		: 'custo'
			,mapping	: 'custo'
		}
		,{
			name		: 'posicao'
			,mapping	: 'posicao'
		}
		,{
			name		: 'situacao'
			,mapping	: 'situacao'
		}
    ]
});	


var listaVoluntarios = new Ext.data.JsonStore({
    storeId: 'listaAtividades',
    url: baseURL + '/service/index.php?controller=VoluntarioController&service=listarVoluntarios',
    //url: baseURL + '/data/listaAtividades.json',
    root: 'elements',
    autoLoad: false,
	sortInfo: {field: 'nome', direction: 'ASC'},
    fields: [
		'codigo'
		, 'nome'
    ]
});

var encerraAtividade = new Ext.data.JsonStore({
    storeId: 'encerraAtividade',
    url: baseURL + '/service/index.php?controller=AtividadeController&service=encerrarAtividade',
    root		: '',
	fields		: []
});


var capturaAtividade = new Ext.data.JsonStore({
    storeId: 'capturaAtividade',
    url: baseURL + '/service/index.php?controller=AtividadeController&service=capturarAtividade',
    //url: baseURL + '/data/capturaAtividade.json',
    root: 'elements',
    autoLoad: false,
	sortInfo: {field: 'titulo', direction: 'ASC'},
    fields: [
		'codigo'
		, 'Projeto_codigo'
		, 'Voluntario_Pessoa_codigo'
		, 'MovimentoCaixa_codigo'
		, 'TipoResponsabilidade_codigo'
		, 'titulo'
		, 'ordemTarefa'
		, 'dataInicio'
		, 'dataFim'
		, 'valorEstimado'
		, 'valorOrcado'
		, 'instrucao'
		, 'prioridade'
		, 'justificativa'
		, 'custo'
		, 'situacao'
    ]
   
});			


var formDadosProjeto = new Ext.form.FormPanel({
	layout: 'form'
	,border: false
	, defaultType: 'textfield'
	, defaults:{
		anchor: '100%'
	}
	,items:[
		{
			xtype: 'fieldset'
			, title: 'Dados Projeto'
			, collapsible: true
			, defaultType: 'textfield'
			, defaults:{
				anchor: '100%'
			}
			,items: [
				{
					xtype: 'hidden'
					,nome: 'codigoProjeto'
					,id: 'codigoProjeto'
					,width: '100%'
					,fieldLabel: 'Código Projeto'
				}
				,{
					fieldLabel:'Projeto'
					,name:'nomeProjeto'
					,disabled:true
				}
			]
		}
	]
})


var barButtonLegenda = new Ext.Panel({
	
	html: '<table cellpadding="2" cellspacing="2" style="font-size:11px"><tr><td><img src="img/marquer_blue.png"></td><td>Não Iniciada</td><td><img src="img/marquer_yellow.png"></td><td>Em andamento</td><td><img src="img/marquer_green.png"></td><td>Concluída</td><td><img src="img/marquer_red.png"></td><td>Atrasada</td></tr></table>'
	,cls: 'bar_button_atividade'
	,border: false
	,height: 28
	,style: 'padding:4px'
});

var barButtonAtividade = new Ext.Toolbar({
	
	items: [
		{
        	text: 'Novo'
        	,handler: functionsGridAtividade.createRecord
        	,iconCls: 'bt_novo'
        	,ref: 'novaAtividade'
    	}
    	,{
        	text: 'Editar'
        	,iconCls: 'bt_editar'
        	,handler: functionsGridAtividade.editRecord
        	,disabled: true
        	,id: 'btEditarAtividade'
    	}
    	,{
        	text: 'Deletar'
        	,iconCls: 'bt_deletar'
        	,handler: functionsGridAtividade.deleteRecord
        	,disabled: true
        	,ref: 'deletar'
        	,id: 'btDeletarAtividade'
    	}
    	,{
        	text: 'Encerrar'
        	,iconCls: 'icon_tick'
        	,handler: functionsGridAtividade.encerrarAtividade
        	,disabled: true
        	,ref: 'encerrar'
        	,id: 'btEncerrarAtividade'
    	}
    	
    	
    ]
});



var gridAtividades = new Ext.grid.GridPanel({
	id: 'atividades'
	//,stripeRows	: true	
	,loadMask	: true
	,width: '100%'
	,height: 350
	,border		: true
	,tbar: barButtonAtividade
	,viewConfig:{
		emptyText		: 'Nenhum registro encontrado'
		,deferEmptyText : false
		,showPreview   : true
		,enableRowBody : true

		,getRowClass   : function(record, index) {
			if(record.data.posicao == "AT") {
				return 'red_row';
			}
			
			if(record.data.posicao == "EA") {
				return 'yellow_row';
			}
			
			if(record.data.posicao == "TR") {
				return 'green_row';
			}
			
			if(record.data.posicao == "NI"){
				return 'blue_row';
			}
		}

		
	}
	,store: listaAtividades
	,autoExpandColumn: 'titulo'
	,columns:[
		{
			dataIndex	: 'codigo'
			,id			: 'codigo'
			,header		: 'Cod'
			,hidden		: true
			,width		: 50
		}
			
		,{
			dataIndex	: 'titulo'
			,id			: 'titulo' // necessário id para utilizar autoExpandColumn
			,header		: 'Título Atividade'
			,width		: 170					
		}
		
		,{
			dataIndex	: 'voluntarioResponsavel'
			,header		: 'Voluntário Responsável'
			,width		: 120					
		}
		
		,{
			dataIndex	: 'dataInicio'
			,header		: 'Data Início'
			,width		: 80
			,renderer	: Ext.util.Format.dateRenderer('d/m/Y')
		}
		
		,{
			dataIndex	: 'dataFim'
			,header		: 'Data Fim'
			,width		: 80
			,renderer	: Ext.util.Format.dateRenderer('d/m/Y')
		}
		
		,{
			dataIndex	: 'valorEstimado'
			,header		: 'Valor Estimado'
			,width		: 90
			,renderer	: Ext.util.Format.numberRenderer('0.000,00/i')
		}

		,{
			dataIndex	: 'prioridade'
			,header		: 'Prioridade'
			,width		: 80
			,renderer	: functionsGridAtividade.trataPrioridade
		}
		
		,{
			dataIndex	: 'custo'
			,header		: 'Custo?'
			,width		: 80
			,renderer	: functionsGridAtividade.trataCusto
		}
		,{
			dataIndex	: 'situacao'
			,header		: 'Situação'
			,width		: 80
			,renderer	: trataSituacao
		}
	]
	,bbar: barButtonLegenda
	
});


gridAtividades.getSelectionModel().on('selectionchange', function(sm){
	Ext.getCmp('btEditarAtividade').setDisabled(sm.getCount() < 1)
	Ext.getCmp('btDeletarAtividade').setDisabled(sm.getCount() < 1)

	
	if(sm.getCount() >= 1 && gridAtividades.getSelectionModel().getSelections()[0].data.posicao != 'TR'){
		Ext.getCmp('btEncerrarAtividade').setDisabled(false);
		
	}else{
		Ext.getCmp('btEncerrarAtividade').setDisabled(true);
	}
});

var abaAtividades = {
	title: 'Atividades do Projeto'
	,iconCls: 'aba_manterProjeto'
	,height: '500'
	,items:[formDadosProjeto, gridAtividades]
	
}



var formAtividade = new Ext.form.FormPanel({
	layout: 'form'
	,border: false
	,items: [
		{
			xtype: 'fieldset'
			, title: 'Dados Atividades'
			, collapsible: true
			, defaultType: 'textfield'
			, defaults:{
				anchor: '100%'
			}
			,items: [
				{
					xtype: 'hidden'
					,name: 'codigo'
					,id: 'codigoAtividade'
				}
			    ,{
					xtype: 'combo'
					,fieldLabel: 'Voluntário Responsável'
					,name: 'Voluntario_Pessoa_codigo'
					,store: listaVoluntarios
					,displayField: 'nome'
					,valueField: 'codigo'
					,hiddenName: 'Voluntario_Pessoa_codigo'
					,mode: 'local'
					,typeAhead: true
					,triggerAction: 'all'
					,allowBlank: false
					,editable: false
					,blankText: 'Campo de preenchimento obrigatório'
				}
				,{
					fieldLabel:'Título'
					,name:'titulo'
				}
				,{
					xtype: 'datefield'
					,fieldLabel:'Data Início'
					,name:'dataInicio'
				}
				,{
					xtype: 'datefield'
					,fieldLabel:'Data Fim'
					,name:'dataFim'
				}
				,{
					xtype:'textarea'
					,fieldLabel:'Instrução'
					,name:'instrucao'
					,anchor:'100%'
				}
				
				,{
					xtype:'textarea'
					,fieldLabel:'Justificativa'
					,name:'justificativa'
					,anchor:'100%'
				}
				
				,{
					xtype: 'masktextfield'
					,fieldLabel: 'Valor Estimado'
					,name:'valorEstimado'
					,mask: 'R$ #9.999.990,00'
					,money: true
				}

				,{
					xtype: 'combo'
					,fieldLabel: 'Prioridade'
					,name: 'prioridade'
					,store: [['B','Baixa'],['M','Média'],['A', 'Alta']]
					,displayField: 'prioridade'
					,valueField: 'codigo'
					,hiddenName: 'prioridade'
					,mode: 'local'
					,typeAhead: true
					,triggerAction: 'all'
					,allowBlank: false
					,editable: false
				}
				
				
				,{
					xtype: 'combo'
					,fieldLabel: 'Custo'
					,name: 'custo'
					,store: [['S','Sim'],['N','Não']]
					,displayField: 'custo'
					,valueField: 'codigo'
					,hiddenName: 'custo'
					,mode: 'local'
					,typeAhead: true
					,triggerAction: 'all'
					,allowBlank: false
					,editable: false
				}
				
				,{
					xtype: 'combo'
					,fieldLabel: 'Situação'
					,name: 'situacao'
					,store: [['S','Ativa'],['N','Inativa']]
					,displayField: 'situacao'
					,valueField: 'codigo'
					,hiddenName: 'situacao'
					,mode: 'local'
					,typeAhead: true
					,triggerAction: 'all'
					,allowBlank: false
					,editable: false
				}
			]
			
			
		}
	]
	
	,buttons: [
   		{
   			text: 'Salvar'
   			, iconCls: 'bt_salvar'
   			, scope	: this
   			, handler: function(){
				if(Ext.getCmp('codigoAtividade').getValue() !=  ""){
					functionsFormAtividade.alteraRegistro();
				}else{
					functionsFormAtividade.insereRegistro();
				}
			}
   		}
   	]
});



var abaManterAtividade = {
	title: 'Dados da atividade'
	,iconCls: 'aba_manterProjeto'
	,items: formAtividade
}

var tabAtividade = new Ext.TabPanel({
	activeItem: 0
	,border: false
	,deferredRender: true
	,plain:true
	,autoScroll: true

	,defaults:{
		layout: 'form'
		,labelWidth: 90 
		,defaultType: 'textfield'
		,autoHeight: true
		,bodyStyle: 'padding: 8px'
		,defaults: {
			anchor: '100%'
		}
	}
		
	,items: [abaAtividades, abaManterAtividade]
});


var windowAtividade = new Ext.Window({
	width: 950
	,title: 'Manter Atividades'
	,height: 550
	,modal:true
	,layout: 'fit'
	,closeAction: 'hide'
	//,constrain	: true
	,maximizable: true
	,items: tabAtividade
	,listeners: {
		"hide": function(){
			Ext.getCmp('projeto').carregaGrid();
		}
	}
});